package com.example.mybatisdemo.service;
import com.example.mybatisdemo.dao.ItemsDao;
import com.example.mybatisdemo.entity.Items;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import lombok.Getter;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 商品表 商品信息相关表：分类表，商品图片表，商品规格表，商品参数表(Items)表服务实现类
 *
 * @author 敲代码的卡卡罗特  公众号：干货食堂
 * @since 2020-05-12 22:53:11
 */
@Service
public class ItemsServiceImpl implements ItemsService {

    @Resource(type = ItemsDao.class)
    @Getter
    private ItemsDao itemsDao;

    /**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
    public Items getById(String id) {
        return itemsDao.getById(id);
    }

    /**
     * 通过实体不为空的属性作为筛选条件查询单个
     *
     * @param items 实例对象
     * @return 对象列表
     */
    public Items getByEntity(Items items) {
        return itemsDao.getByEntity(items);
    }

    /**
     * 通过实体不为空的属性作为筛选条件查询列表
     *
     * @param items 实例对象
     * @return 对象列表
     */
    public List<Items> listByEntity(Items items) {
        return itemsDao.listByEntity(items);
    }

    /**
     * 通过实体不为空的属性作为or like筛选条件查询列表
     *
     * @param items 实例对象
     * @return 对象列表
     */
    public List<Items> listByEntityLike(Items items) {
        return itemsDao.listByEntityLike(items);
    }

    /**
     * 通过id列表作为筛选条件查询列表
     *
     * @param ids
     * @return 对象列表
     */
    public List<Items> listByIds(List<String> ids) {
        return itemsDao.listByIds(ids);
    }


    /**
     * 新增实体属性不为null的列
     *
     * @param items 实例对象
     * @return 影响行数
     */
    public int insert(Items items) {
        return itemsDao.insert(items);
    }

    /**
     * 批量新增所有列，列表长度不能为0，且列表id统一为null或者统一不为null
     *
     * @param list 实例对象list集合
     * @return 影响行数
     */
    public int insertBatch(List<Items> list) {
        return itemsDao.insertBatch(list);
    }

    /**
     * 通过主键修改实体属性不为null的列
     *
     * @param items 实例对象
     * @return 影响行数
     */
    public int update(Items items) {
        return itemsDao.update(items);
    }

    /**
     * 通过主键修改实体列表，列表长度不能为0
     * 注意：当实体属性为null时，对应的列也会别更新为null
     *
     * @param list 实例对象
     * @return 影响行数
     */
    public int updateBatch(List<Items> list) {
        return itemsDao.updateBatch(list);
    }

    /**
     * 通过主键删除数据
     *
     * @param id 主键
     * @return 影响行数
     */
    public int deleteById(String id) {
        return itemsDao.deleteById(id);
    }

    /**
     * 通过实体非空属性批量删除
     *
     * @param items 实体
     * @return 影响行数
     */
    public int deleteByEntity(Items items) {
        return itemsDao.deleteByEntity(items);
    }

    /**
     * 通过主键列表删除，列表长度不能为0
     *
     * @param list 主键列表
     * @return 影响行数
     */
    public int deleteByIds(List<String> list) {
        return itemsDao.deleteByIds(list);
    }

    /**
     * 获取整张表的行数
     * @return 统计行数
     */
    public int countAll() {
        return itemsDao.countAll();
    }

    /**
     * 通过实体不为空的属性作为筛选条件查询行数
     * @param items 实体
     * @return 统计行数
     */
    public int countByEntity(Items items) {
        return itemsDao.countByEntity(items);
    }

    /**
     * 分页查询
     * @param currentPage
     * @param pageSize
     * @return
     */
    public PageInfo<Items> findPage(int currentPage, int pageSize){
        //静态分页
        PageHelper.startPage(currentPage,pageSize);
        //分页查询
        return new PageInfo<Items>(itemsDao.listByEntity(new Items()));
    }
}
